<?php

namespace app\api\controller;

use app\common\controller\Api;
use OSS\OssClient;
use think\Response;
use think\Cache;
use fast\Http;

/**
 * 首页接口
 */
class Image extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    /**
     * 首页
     *
     */
    public function index()
    {
        // QueueApi::
        $this->success('请求成功666');
    }
    /**
     * 生成宣传海报
     * @param array  参数,包括图片和文字
     * @param string  $filename 生成海报文件名,不传此参数则不生成文件,直接输出图片
     * @return [type] [description]
     */
    public function createPoster($config = array(), $filename = "")
    {
        //如果要看报什么错，可以先注释调这个header
        if (empty($filename)) {
            header("content-type: image/png");
        }
        //header("content-type: image/png");
        $imageDefault = array(
            'left' => 0,
            'top' => 0,
            'right' => 0,
            'bottom' => 0,
            'width' => 100,
            'height' => 100,
            'opacity' => 100
        );
        $textDefault = array(
            'text' => '',
            'left' => 0,
            'top' => 0,
            'fontSize' => 32,       //字号
            'fontColor' => '255,255,255', //字体颜色
            'angle' => 0,
        );
        $background = $config['background']; //海报最底层得背景
        //背景方法
        $backgroundInfo = getimagesize($background);
        $backgroundFun = 'imagecreatefrom' . image_type_to_extension($backgroundInfo[2], false);
        $background = $backgroundFun($background);
        $backgroundWidth = imagesx($background);  //背景宽度
        $backgroundHeight = imagesy($background);  //背景高度
        $imageRes = imageCreatetruecolor($backgroundWidth, $backgroundHeight);
        $color = imagecolorallocate($imageRes, 0, 0, 0);
        imagefill($imageRes, 0, 0, $color);
        // imageColorTransparent($imageRes, $color);  //颜色透明
        imagecopyresampled($imageRes, $background, 0, 0, 0, 0, imagesx($background), imagesy($background), imagesx($background), imagesy($background));
        //处理了图片
        if (!empty($config['image'])) {
            foreach ($config['image'] as $key => $val) {
                $val = array_merge($imageDefault, $val);

                $info = getimagesize($val['url']);
                $function = 'imagecreatefrom' . image_type_to_extension($info[2], false);
                if ($val['stream']) {   //如果传的是字符串图像流
                    $info = getimagesizefromstring($val['url']);
                    $function = 'imagecreatefromstring';
                }
                $res = $function($val['url']);
                $resWidth = $info[0];
                $resHeight = $info[1];
                //建立画板 ，缩放图片至指定尺寸
                $canvas = imagecreatetruecolor($val['width'], $val['height']);
                imagefill($canvas, 0, 0, $color);
                //关键函数，参数（目标资源，源，目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h）
                imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'], $resWidth, $resHeight);
                $val['left'] = $val['left'] < 0 ? $backgroundWidth - abs($val['left']) - $val['width'] : $val['left'];
                $val['top'] = $val['top'] < 0 ? $backgroundHeight - abs($val['top']) - $val['height'] : $val['top'];
                //放置图像
                imagecopymerge($imageRes, $canvas, $val['left'], $val['top'], $val['right'], $val['bottom'], $val['width'], $val['height'], $val['opacity']); //左，上，右，下，宽度，高度，透明度
            }
        }
        //处理文字
        if (!empty($config['text'])) {
            foreach ($config['text'] as $key => $val) {
                $val = array_merge($textDefault, $val);
                list($R, $G, $B) = explode(',', $val['fontColor']);
                $fontColor = imagecolorallocate($imageRes, $R, $G, $B);
                $val['left'] = $val['left'] < 0 ? $backgroundWidth - abs($val['left']) : $val['left'];
                $val['top'] = $val['top'] < 0 ? $backgroundHeight - abs($val['top']) : $val['top'];
                imagettftext($imageRes, $val['fontSize'], $val['angle'], $val['left'], $val['top'], $fontColor, $val['fontPath'], $val['text']);
            }
        }
        //生成图片
        if (!empty($filename)) {
            $res = imagejpeg($imageRes, $filename, 90); //保存到本地
            imagedestroy($imageRes);
            if (!$res) {
                return false;
            }
            return $filename;
        } else {
            imagejpeg($imageRes);     //在浏览器上显示
            imagedestroy($imageRes);
        }
    }
    // 生成二维码
    public function build($url = "https://www.sx2b2c.com/")
    {
        $config = get_addon_config('qrcode');
        $params = $this->request->get();
        $params = array_intersect_key($params, array_flip(['text', 'size', 'padding', 'errorlevel', 'foreground', 'background', 'logo', 'logosize', 'logopath', 'label', 'labelfontsize', 'labelalignment']));

        $params['text'] = $url;
        //$params['label'] = '456';

        $qrCode = \addons\qrcode\library\Service::qrcode($params);

        $mimetype = $config['format'] == 'png' ? 'image/png' : 'image/svg+xml';

        $response = Response::create()->header("Content-Type", $mimetype);

        // 直接显示二维码
        header('Content-Type: ' . $qrCode->getContentType());
        $response->content($qrCode->writeString());

        // 写入到文件
        if ($config['writefile']) {
            $qrcodePath = ROOT_PATH . 'public/uploads/qrcode/';
            if (!is_dir($qrcodePath)) {
                @mkdir($qrcodePath);
            }
            if (is_really_writable($qrcodePath)) {
                $filePath = $qrcodePath . md5(implode('', $params)) . '.' . $config['format'];
                $qrCode->writeFile($filePath);
            }
        }

        return $response;
    }
    /**
     * 生成外卖海报
     *
     * @return void
     */
    public function waimai($url = "www.baidu.com", $bg = "https://mtmhapp.oss-cn-hangzhou.aliyuncs.com/oss/uploads/backend/202207/0_e68b889e15792aa3edf07b115f6595f1.jpg")
    {
        //  $image = 'https://qr.uu.hk.cn/?m=1&e=L&p=8&url=' . urlencode($url);
        $image = $this->createQrCode($url);
        // return $image;
        $config = array(
            'image' => array(
                array(
                    'url' => $image,     //二维码资源
                    'stream' => 0,
                    'left' => 270,
                    'top' => -118,
                    'right' => 0,
                    'bottom' => 0,
                    'width' => 210,
                    'height' => 210,
                    'opacity' => 100
                )
            ),
            'background' => cdnurl($bg, true)           //背景图
        );
        $time = time() + rand(1000, 99999);
        $filename = ROOT_PATH . 'public/uploads/xcxcode/' . $time . '.png';
        $this->createPoster($config, $filename);

      //  $config = get_addon_config('alioss');
        $rrrrr = '/uploads/xcxcode/' . $time . '.png';
        //$open = fopen($filename, "a");
        // fwrite($open, $params['wechat_cert_client']);
        // fclose($open);
        // $oss = new OssClient($config['accessKeyId'], $config['accessKeySecret'], $config['endpoint']);
        ///  $ret = $oss->uploadFile($config['bucket'], $rrrrr, $rrrrr);
        // @unlink($rrrrr);

        return $rrrrr;
        //echo $this->createPoster($config);
    }
    public  function createQrCode($url, $type = 'hczjcc', $admin_id = 0)
    {
        $headers = ['Authorization: APPCODE d706e6ced7fe4cd4820a7950d92b5ff9'];
        $options = [
            CURLOPT_HTTPHEADER => $headers
        ];
        if (Cache::has('code_' . $type . $admin_id)) {
            // return Cache::get('code_' . $type . $admin_id);
        }
        //qrservice.market.alicloudapi.com/createQrCode
        $r = http::get('https://qrservice.market.alicloudapi.com/createQrCode?size=10&content=' . urlencode($url) . '', [], $options);
        // return $r;
        $r_arr = json_decode($r, true);
        //{ "showapi_res_error": "", "showapi_res_id": "62e5f2570de3760061887060", "showapi_res_code": 0, "showapi_fee_num": 1, "showapi_res_body": {"msg":"操作成功!","imgUrl":"http://static1.showapi.com/app2/img/qrCode/20220731/1659236951207.png","flag":"true","ret_code":0} }
        if (isset($r_arr['showapi_res_body']['imgUrl'])) {
            // Cache::set('code_' . $type . $admin_id, $r_arr['showapi_res_body']['imgUrl'],);
            return $r_arr['showapi_res_body']['imgUrl'];
        } else {
            return  '';
        }
    }
    /**
     * 生成外卖海报
     *
     * @return void
     */
    public function waimaiNew($image = 'http://p0.meituan.net/poiqrcode/e8890e90da62453c20ed20529e161c22100853.jpg', $type = 4)
    {
        if ($type == 2) {
            $PATH =  ROOT_PATH . 'public/uploads/20210410/1002.jpg';
            $left = 185;
            $top = -116;
            $width = 250;
            $height = 250;
        } elseif ($type == 3) {
            $PATH =  ROOT_PATH . 'public/uploads/20210410/1003.jpg';
            $left = 225;
            $top = -131;
            $width = 150;
            $height = 150;
        } else {
            $PATH =  ROOT_PATH . 'public/uploads/20210410/1004.jpg';
            $left = 225;
            $top = -131;
            $width = 150;
            $height = 150;
        }
        $config = array(
            'image' => array(
                array(
                    'url' => $image,     //二维码资源
                    'stream' => 0,
                    'left' => $left,
                    'top' => $top,
                    'right' => 0,
                    'bottom' => 0,
                    'width' => $width,
                    'height' => $height,
                    'opacity' => 100
                )
            ),
            'background' =>    $PATH      //背景图
        );
        $time = time() + rand(1000, 99999);
        $filename = ROOT_PATH . 'public/uploads/xcxcode/' . $time . '.png';
        $this->createPoster($config, $filename);

        $config = get_addon_config('alioss');
        $rrrrr = 'uploads/xcxcode/' . $time . '.png';
        //echo $rrrrr;
        $oss = new OssClient($config['accessKeyId'], $config['accessKeySecret'], $config['endpoint']);
        $ret = $oss->uploadFile($config['bucket'], $rrrrr, $rrrrr);
        @unlink($rrrrr);

        return cdnurl('/uploads/xcxcode/' . $time . '.png', true);
        //echo $this->createPoster($config);
    }
}
